import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Tanque2 here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Tanque2 extends Mover
{
    private final int IZQ=-45;  //Grados que gira hacia la izquierda
    private final int DER=45;   //Grados que gira hacia la derecha
    private int direccion=1;    //Direccion del tanque
    private int velocidad=0;    //Velocidad del tanque

    public void act() 
    {   
        
        muevete();
        dispara();
        velocidad++; 
        desaparecePoder();
    } 
    
    public void desaparecePoder()
    {
        Fondo miMundo=(Fondo)getWorld();
        Actor pa=getOneIntersectingObject(PoderAcero.class);
        Actor b=getOneIntersectingObject(Bomba.class);
        if(pa != null)
        {
            getWorld().removeObject(pa);
            //Greenfoot.playSound("muereEnemigo.wav");
            miMundo.ponCuartelAcero();
        }
        if(b != null)
        {
            getWorld().removeObject(b);
            //Greenfoot.playSound("muereEnemigo.wav");
            miMundo.destruyeTanques();
        }
    }
        
    /**
     * Hace que el tanque del usuario se mueva con las teclas de direccion del teclado
     */   
    public void muevete()
    {
         boolean hay=false;
         
         /**
          * Checa que no se salga del margen del escenario y lo regresa una posicion
          */
         if(getX()>=542)
            setLocation(getX()-1,getY());
            
         if(HayObjeto())
         {
             hay=true; //Checa si hay un objeto a su alrededor 
         }
         
         if(getX()<542)
            if(Greenfoot.isKeyDown("up")) // Checa si se preciona la tecla flecha arriba
            {
                if(hay==false)
                    move();
            }
       
         if(velocidad%10 == 0)
         {                             
             if(Greenfoot.isKeyDown("left")) // Checa si se preciona la tecla flecha izquierda y gira el tanque a la derecha
             {
                 if(hay==true)
                 {
                     cambiaPosicion();
                     hay=false;
                 }
                 turn(IZQ);
                 if (getRotation()<=-360)
                    setRotation(0);
             }
             else 
                if(Greenfoot.isKeyDown("right")) // Checa si se preciona la tecla flecha derecha y gira el tanque a la izquierda
                {
                    if(hay==true)
                    {
                        cambiaPosicion();
                        hay=false;
                    }
                    turn(DER);
                    if (getRotation()>=360)
                        setRotation(0);
                }
         }
         cambiaDireccion(getRotation());
    } 
        
    /** 
     * Hace que el tanque del usuario dispare con la tecla abajo del las teclas de direccion
     */       
    public void dispara()
    {
        if(velocidad%10==0)
        {
            if(Greenfoot.isKeyDown("down"))
            {
                Actor A=new Bala(getRotation());
                int x=getX();
                int y=getY();
                World world=getWorld();
                world.addObject(A,x,y);
                Greenfoot.playSound("dispara.wav");
            }
        }
    }

    /**
     * Cuando Hay pared da vuelta y cambia de posicion
     */
    public void cambiaPosicion()
    {
        switch(direccion)
        {
            case 1: setLocation(getX(),getY()+5);
                    break;

            case 2: setLocation(getX()-5,getY());
                    break;

            case 3: setLocation(getX(),getY()-5);
                    break;

            case 4: setLocation(getX()+5,getY());
                    break;
        }
    }

    /**
     * Cambia la Direccion dependiendo hacia donde se haya girado
     */
    public void cambiaDireccion(int Rotacion)
    {
        if (Rotacion==270 || Rotacion==-90)
            direccion=1;
            
        if(Rotacion==0)
            direccion=2;
                
        if(Rotacion==90 || Rotacion==-270)
            direccion=3;
                
        if(Rotacion==180 || Rotacion==-180)
            direccion=4;
    }   
}
